home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #6 / Amiga Plus CD - 2004 - No. 06.iso / AmiSoft / Dev / src / Apfelberge.lha / Apfelberge / Apfelberge.c < prev    next >
C/C++ Source or Header  |  2004-04-28  |  2KB  |  107 lines

  1. ;/*
  2. sc Apfelberge.c link parm r opt math 8 nostkchk ign 306,73 idir "" to ApfelbergeFPU
  3. ;sc Apfelberge.c link parm r opt math f nostkchk ign 306,73 idir ""
  4. ;gcc -s -O2 -Qn -I. -oApfelbergeMOS Apfelberge.c
  5. quit;*/
  6. /* C: Stefan A. Haubenthal 3/03 */
  7. /* BASIC: G. Paret 7/86, F. Müller 1/87 */
  8.  
  9. #include <stdlib.h>
  10. #include <joystick.h>
  11. #include <tgi.h>
  12.  
  13. #ifndef __AMIGADATE__
  14. #define __AMIGADATE__ "("__DATE__")"
  15. #endif
  16. const char VERsion[]="$VER: Apfelberge 3.0 "__AMIGADATE__
  17. #ifdef _M68881
  18. " FPU"
  19. #endif
  20. " $";
  21. #ifdef __CC65__
  22. #define FLOAT int
  23. #define ITOF(x) x
  24. #else
  25. #define FLOAT float
  26. #define ITOF(x) (x)/100.
  27. #endif
  28.  
  29. const int xm=105, ym=105;
  30. const xc=1, yc=0, t=20, s=60;
  31. FLOAT xl=ITOF(-15), xr=ITOF(26), yo=ITOF(47), yu=ITOF(90);
  32.  
  33. void calc(FLOAT xl, FLOAT xr, FLOAT yo, FLOAT yu)
  34. {
  35. const FLOAT dx=(xr-xl)/xm, dy=(yu-yo)/ym;
  36. unsigned n, m, k, v, v1, u, u1;
  37. FLOAT y1, x, y, x2, y2;
  38.  
  39. for (n=0; n<ym; ++n)
  40.     {
  41.     y1=yo+n*dy;
  42.     for (m=0; m<=xm; ++m)
  43.         {
  44.         x=xl+m*dx;
  45.         y=y1;
  46.         k=0;
  47.         do
  48.             {
  49.             x2=x*x;
  50.             y2=y*y;
  51.             y=2*x*y-yc;
  52.             x=x2-y2-xc;
  53.             } while (++k<t && x2+y2<s);
  54.         u=m+53-n/2;
  55.         u1=u+1;
  56.         v=n+80;
  57.         v1=v-3*(k-1);
  58.         tgi_setcolor(3);
  59.         tgi_line(u, v, u, v1);
  60.         tgi_setcolor(2);
  61.         tgi_line(u1, v, u1, v1);
  62.         tgi_setcolor(1);
  63.         tgi_line(u, v1, u1, v1);
  64.         }
  65.     }
  66. }
  67.  
  68. int p;
  69.  
  70. main(int argc, char *argv[])
  71. {
  72. short f=1;
  73. #ifdef __JOYSTICK__
  74. int j;
  75.  
  76. joy_load_driver(joy_stddrv);
  77. p=argc==1 ? joy_count()-1 : atoi(argv[1]);
  78. #endif
  79. tgi_load(TGI_MODE_160_200_4);
  80. tgi_init();
  81. do
  82.     {
  83.     if (f)
  84.         {
  85. //        tgi_clear();
  86.         calc(xl, xr, yo, yu);
  87. //        printf("%f %f %f %f\n", xl, xr, yo, yu);
  88.         f=0;
  89.         }
  90. #ifdef __JOYSTICK__
  91.     j=joy_read(p);
  92.     if (JOY_BTN_UP(j))
  93.         yo-=ITOF(10),yu-=ITOF(10),f=1;
  94.     if (JOY_BTN_DOWN(j))
  95.         yo+=ITOF(10),yu+=ITOF(10),f=1;
  96.     if (JOY_BTN_LEFT(j))
  97.         xl-=ITOF(10),xr-=ITOF(10),f=1;
  98.     if (JOY_BTN_RIGHT(j))
  99.         xl+=ITOF(10),xr+=ITOF(10),f=1;
  100.     } while (!(JOY_BTN_FIRE(j)));
  101. joy_unload();
  102. #else
  103.     } while (0);
  104. #endif
  105. tgi_unload();
  106. }
  107.